package com.sparkseries.dao;

import com.sparkseries.domain.SysDepartment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 部门管理
 * TODO
 * 排序
 *
 */
@Mapper
public interface SysDepartmentMapper {

    /**
     * 插入多个部门信息到数据库
     *
     * @param sysDepartments 部门对象列表
     * @return 插入成功的记录数
     */
    Integer insertDepartments(@Param("sysDepartments") List<SysDepartment> sysDepartments);

    /**
     * 根据部门ID获取部门信息
     *
     * @param id 部门ID
     * @return 对应的部门对象，如果不存在则返回null
     */
    SysDepartment getDepartmentById(@Param("id") Integer id);

    /**
     * 更新部门信息
     *
     * @param sysDepartment 部门对象，包含需要更新的信息
     * @return 更新成功的记录数
     */
    Integer updateDepartment(@Param("sysDepartment") SysDepartment sysDepartment);

    /**
     * 根据部门ID列表删除部门信息（逻辑删除，设置is_enabled为0）
     *
     * @param ids 部门ID列表
     * @return 更新成功的记录数
     */
    Integer deleteDepartment(@Param("ids") List<Integer> ids);

    /**
     * 获取所有启用的部门信息
     *
     * @return 启用的部门对象列表
     */
    List<SysDepartment> getAllDepartments();

    /**
     * 获取指定ID部门的所有直接子部门信息
     *
     * @param id 父部门ID
     * @return 直接子部门对象列表
     */
    List<SysDepartment> getDirectChildren(@Param("id") Integer id);

    /**
     * 根据条件查询部门信息
     *
     * @param sysDepartment 包含查询条件的部门对象
     * @return 符合条件的部门对象列表
     */
    List<SysDepartment> findDepartmentByCondition(@Param("sysDepartment") SysDepartment sysDepartment);
}
